import base_url from "../apis/domain.js"

// 请求拦截器
async function beforeRequest(config){
	// 请求之前做的操作
	let { url='',method='' } = config
	// config["X-HTTP-METHOD-OVERRIDE"] = ''
	
	// if(method != "GET" && method != "POST"){		// 添加请求辅助类（后端做兼容）
	// 	config["X-HTTP-METHOD-OVERRIDE"] = method
	// }
	
	// #ifdef MP-WEIXIN
	config.AppId = 'wxc091a3953d1a78a0';
	// #endif
	// #ifdef MP-KUAISHOU
	config.AppId = 'ks684547145870820928';
	// #endif
	
	// '3fdfd-f3302-e8668-8e56b-85242-5a052-a5e9a-c5a64'
	config.token = await uni.getStorageSync("token");		// 获取token一定要在最后
	
	console.log("请求拦截器",config);
	return config
}

const http = {
	async request(config) {	// config请求配置对象
		config = await beforeRequest(config);		// 请求拦截器
		// 发送请求的方法
		return new Promise(async (resolve, reject) => {
			uni.request({
				url: base_url + config.url,
				method: config.method,
				data: config.data,
				header: { 
				    "Access-Token":config.token,
				    "Content-Type":"application/x-www-form-urlencoded",
					// "AppId":config.AppId,
					// "X-HTTP-METHOD-OVERRIDE":config["X-HTTP-METHOD-OVERRIDE"]
				},
				async success(res) {
					if(res.statusCode === 200){
						let serverResponse = res.data
						// const serverResponse = beforeResponse(res.data)	// 响应拦截器
						if (serverResponse.code === 200) {
							// console.log("查看请求成功----抛出数据",serverResponse);
						    resolve(serverResponse)
						} else{
							uni.showToast({ title: serverResponse.msg });
							reject(serverResponse)
						}
					}else{
						reject(new Error(res.statusCode))
					}
				},
				fail(err) {
					console.log("查看请求失败----",err);
					errHandle(err)
					reject(err)
				}
			})
		})
	},
	get(url, data='') {
		return this.request({
			url:url,
			data:data,	// 会将数据转换为 query string。例 { name: 'name', age: 18 } 转换 name=name&age=18
			method:'GET'
		})
	},
	post(url, data='') {
		return this.request({
			url:url,
			data:data,
			method:'POST'
		})
	},
	delete(url) {	// delete方法一般是没有请求体的
		return this.request({
			url:url,
			method:'DELETE'
		})
	},
	put(url, data='') {
		return this.request({
			url:url,
			data:data,
			method:'PUT'
		})
	},
}

// 响应拦截器
const beforeResponse = (response) =>{
	// 请求之前做的操作
	// console.log("响应拦截器",response);
	return response
}

// 异常处理器
const errHandle = (err)=>{
	uni.showToast({ title: `网络错误,请稍候再试：${err}`,icon: 'none'})
}


export default http